﻿using DevExpress.XtraGrid.Demos.util;
using DXApplicationTangche.DTO;
using DXApplicationTangche.service;
using mendian;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DXApplicationTangche.UC.项目流程.Service
{
    public class 流程Service
    {
        /// <summary>
        /// 未完成项目一览1
        /// </summary>
        public static List<OrderProjectDTO> getDoneFalseOrderProjects()
        {
            return
                FunctionHelper.JsonDeserialization<List<OrderProjectDTO>>(
                    RestCall.httpGetMethod(
                        URL.接口url + "/project/getDoneFalseOrderProjects"
                        )
                    );
        }
        /// <summary>
        /// 未完成订单项目一览
        /// </summary>
        /// <returns></returns>
        public static List<OrderWholeProjectDTO> getDoneFalseOrderWholeProjects()
        {
            return
                FunctionHelper.JsonDeserialization<List<OrderWholeProjectDTO>>(
                    RestCall.httpGetMethod(
                        URL.接口url + "/project/getDoneFalseOrderWholeProjects"
                        )
                    );
        }
        /// <summary>
        /// 查询项目关联任务
        /// </summary>
        /// <param name="projectInstanceId"></param>
        /// <returns></returns>
        public static List<OrderTaskDTO> findAssociateTaskByFrontProjectInstanceId(String projectInstanceId)
        {
            return
                FunctionHelper.JsonDeserialization<List<OrderTaskDTO>>(
                    RestCall.httpGetMethod(
                        URL.接口url + "/project/findAssociateTaskByFrontProjectInstanceId?projectInstanceId=" + projectInstanceId
                        )
                    );
        }
        /// <summary>
        /// 查询当前任务和父子任务
        /// </summary>
        /// <param name="wbsTemplateId"></param>
        /// <param name="orderId"></param>
        /// <param name="code"></param>
        /// <returns></returns>
        public static OrderTaskAndParentFacadeDTO getOrderTaskAndParentFacade(String wbsTemplateId, String orderId, String code)
        {
            return
            Newtonsoft.Json.JsonConvert.DeserializeObject<OrderTaskAndParentFacadeDTO>(
                RestCall.httpGetMethod(
                        URL.接口url + "/project/getOrderTaskAndParentFacade?wbsTemplateId=" + wbsTemplateId
                        + "&orderId=" + orderId
                        + "&code=" + code
                        )
                );


            //FunctionHelper.JsonDeserialization<OrderTaskAndParentFacadeDTO>(
            //    RestCall.httpGetMethod(
            //        URL.接口url + "/project/getOrderTaskAndParentFacade?wbsTemplateId=" + wbsTemplateId 
            //        + "&orderId=" + orderId 
            //        + "&code=" + code
            //        )
            //    );
        }
        /// <summary>
        /// 查询超过某个时间未完成项目
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static List<OrderTaskDTO> findOrderTaskDTOsByOrderTaskQueryDTO(OrderTaskQueryDTO orderTaskQueryDTO)
        {
            return
                FunctionHelper.JsonDeserialization<List<OrderTaskDTO>>(
                    RestCall.PostHttp(
                        URL.接口url + "/project/findOrderTaskDTOsByOrderTaskQueryDTO",
                        FunctionHelper.JsonSerialization(orderTaskQueryDTO)
                        )
                    );
        }
        /// <summary>
        /// 任务完成——无成果物
        /// </summary>
        /// <param name="projectInstanceId"></param>
        /// <param name="mnemonic"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static OrderTaskDTO taskDone(String projectInstanceId, String mnemonic, String content)
        {
            return
                FunctionHelper.JsonDeserialization<OrderTaskDTO>(
                    RestCall.httpGetMethod(
                        URL.接口url + "/project/taskDone?projectInstanceId=" + projectInstanceId
                        + "&mnemonic=" + mnemonic
                        + "&content=" + content
                        )
                    );
        }
        /// <summary>
        /// 任务完成——有成果物
        /// </summary>
        /// <param name="sessionId"></param>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static String taskDoneWithAchievem(
            String projectInstanceId,
            String mnemonic,
            String content,
            String fileName
            )
        {
            return
                FileService.UploadRequest(
                    URL.接口url + "/project/taskDoneWithAchievem?projectInstanceId=" + projectInstanceId
                        + "&mnemonic=" + mnemonic
                        + "&content=" + content,
                    fileName,
                    Path.GetFileName(fileName),
                    "multipartFile"
                    );
        }
        /// <summary>
        /// 根据订单id查询项目下的最终成果物
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        public static List<OrderProjectAchievementDTO> getProjectAchievementByOrderId(String orderId)
        {
            return
                FunctionHelper.JsonDeserialization<List<OrderProjectAchievementDTO>>(
                    RestCall.httpGetMethod(
                        URL.接口url + "/project/getProjectAchievementByOrderId?orderId=" + orderId
                        )
                    );
        }

    }
    public class OrderProjectDTO
    {
        public String orderId { get; set; }
        public String wbsTemplateId { get; set; }
        public String templateName { get; set; }    //  WBS模板名称
        /**
         * 订单信息
         */
        public String orderNo { get; set; }//订单号
        public Double orderNumber { get; set; }//订单数量
        public DateTime orderDate { get; set; }//订单时间
        public String orderType { get; set; }
        public String remarks { get; set; }//备注
        /**
         * 参考款式信息
         */
        public String refBarcode { get; set; }  //  参考成衣条码
        /**
         * 销售渠道信息
         */
        public String salesType { get; set; }   //  销售方式    top.toptimus.constValue.SalesTypeConsts
        public String salesChannel { get; set; }    //  销售渠道
        /**
         * 客户信息
         */
        public String customerId { get; set; }
        public String customerName { get; set; }    //  客户姓名
        public String consignee { get; set; }   //  收件人
        public String mobile { get; set; }

        /**
         * 门店信息
         */
        public String shopId { get; set; }
        public String shopName { get; set; }

        /**
         * 款式信息
         */
        public String styleSizeCd { get; set; }//尺码
        public String styleNameCn { get; set; }//款式名称
        public String styleCategoryCd { get; set; }
        /**
         * 面料信息
         */
        public String styleFabricId { get; set; }//面料id
        public String materialNameCn { get; set; }//面料描述名称
        public String composition { get; set; }//面料成分

        /**
         * 项目信息
         */
        public DateTime actualFinishDate { get; set; }  //  实际完成时间
        public DateTime startTimePlanned { get; set; }  //  计划开始时间（工单时间）
        public double duration { get; set; }    //  工期
        public double costPlusFixedFee { get; set; }   //  成本加固定费用
        public String responsorId { get; set; }  //  任务负责人ID
        public String responsor { get; set; }    //  任务负责人
        public AchievementDTO achievementDTO { get; set; } = new AchievementDTO();
        public Boolean done { get; set; }   //  完成标识
        public OrderProjectDTO()
        {

        }
    }
    /// <summary>
    /// 
    /// </summary>
    public class OrderTaskAndParentFacadeDTO
    {
        public OrderTaskDTO currentOrderTaskDTO { get; set; } = new OrderTaskDTO(); //当前任务
        public OrderTaskDTO parentOrderTaskDTO { get; set; } = new OrderTaskDTO(); //父任务
        public List<OrderTaskDTO> childOrderTaskDTOs { get; set; } = new List<OrderTaskDTO>(); //子任务
        public OrderTaskAndParentFacadeDTO()
        {

        }
    }
    /// <summary>
    /// 
    /// </summary>
    public class AchievementDTO
    {
        public String mime { get; set; }
        public String filePath { get; set; }
        public AchievementDTO()
        {

        }
    }
    public class OrderTaskDTO
    {
        public String id { get; set; }
        public String orderId { get; set; } //  订单id
        //  订单信息
        public String orderNo { get; set; }//订单号
        //  销售渠道
        public String salesType { get; set; }   //  销售方式
        public String salesChannel { get; set; }    //  销售渠道
        //  款式信息
        public String styleNameCn { get; set; }//款式名称
        //  面料信息
        public String materialCode { get; set; }//面料号
        public String materialNameCn { get; set; }//面料描述名称
        public String composition { get; set; }//面料成分
        //  客户信息
        public String customerId { get; set; }
        public String customerName { get; set; }    //  客户姓名
        public String mobile { get; set; }  //  联系人电话
        //  WBS模板信息
        public String wbsTemplateId { get; set; }   //  WBS模板id
        public String wbsItemId { get; set; }  //  WBS项目id
        public String parentId { get; set; }    //  父id
        public String activityDescription { get; set; } //  工作描述
        public String code { get; set; }  //  WBS编码顺序
        public int index { get; set; }   //  顺序
        //  WBS实例信息
        public DateTime actualFinishDate { get; set; }  //  实际完成时间
        public DateTime startTimePlanned { get; set; }  //  计划开始时间（工单时间）
        public double duration { get; set; }    //  工期
        public double costPlusFixedFee { get; set; }   //  成本加固定费用
        public String responsorId { get; set; }  //  任务负责人ID
        public String responsor { get; set; }    //  任务负责人
        public String assigneeId { get; set; }  //  执行人id
        public String assignee { get; set; }  //  执行人
        public AchievementDTO achievementDTO { get; set; } = new AchievementDTO();
        public Boolean done { get; set; }   //  完成标识
        public OrderTaskDTO()
        {

        }
    }
    public class OrderTaskQueryDTO
    {
        public Boolean getAll { get; set; }
        public String orderId { get; set; }
        public OrderTaskQueryDTO()
        {
            this.getAll = true;
        }
        public OrderTaskQueryDTO(String orderId)
        {
            this.getAll = false;
            this.orderId = orderId;
        }
    }

    public class OrderWholeProjectDTO
    {
        public String orderId { get; set; }
        /**
         * 订单信息
         */
        public String orderNo { get; set; }//订单号
        public Double orderNumber { get; set; }//订单数量
        public DateTime orderDate { get; set; }//订单时间
        public String orderType { get; set; }
        public String remarks { get; set; }//备注
        /**
         * 参考款式信息
         */
        public String refBarcode { get; set; }  //  参考成衣条码
        /**
         * 销售渠道信息
         */
        public String salesType { get; set; }   //  销售方式    top.toptimus.constValue.SalesTypeConsts
        public String salesChannel { get; set; }    //  销售渠道
        /**
         * 客户信息
         */
        public String customerId { get; set; }
        public String customerName { get; set; }    //  客户姓名
        public String consignee { get; set; }  //  收件人
        public String mobile { get; set; }

        /**
         * 门店信息
         */
        public String shopId { get; set; }
        public String shopName { get; set; }

        /**
         * 款式信息
         */
        public String styleSizeCd { get; set; }//尺码
        public String styleNameCn { get; set; }//款式名称
        public String styleCategoryCd { get; set; }
        /**
         * 面料信息
         */
        public String styleFabricId { get; set; }//面料id
        public String materialNameCn { get; set; }//面料描述名称
        public String composition { get; set; }//面料成分
        public OrderWholeProjectDTO()
        {

        }
    }
    public class OrderProjectAchievementDTO
    {
        public String id { get; set; }
        public String orderId { get; set; }
        public String wbsTemplateId { get; set; }
        public String wbsTemplateName { get; set; }    //  WBS模板名称
        public String filePath { get; set; }    //  文件返回值
        public DateTime createDate { get; set; }
        public int version { get; set; }
        //  WBS实例信息
        public DateTime actualFinishDate { get; set; }  //  实际完成时间
        public DateTime startTimePlanned { get; set; } //  计划开始时间（工单时间）
        public double duration { get; set; }    //  工期
        public double costPlusFixedFee { get; set; }   //  成本加固定费用
        public String responsorId { get; set; }  //  任务负责人ID
        public String responsor { get; set; }    //  任务负责人
        public String assigneeId { get; set; }  //  执行人id
        public String assignee { get; set; }  //  执行人
        public OrderProjectAchievementDTO()
        {

        }
    }
}
